隨著 AI 對於各領域和社會的影響逐漸增加,建立公平且可包容所有人的系統至關重要,為達到負責任的 AI,重視公平性,實踐以人為本的設計初衷,確定多個指標來訓練與評估,檢查原始資料、理解資料與模型的局限性、部署後繼續監控和更新系統成了 MLOps 重要動力。
關於公平性沒有絕對的定義,不同國情、文化都有在意的事情,您可以參考就業服務法第5條所示的就業平等認定,這是法律揭示應在就業情境中平等的規定,可用以檢視與追蹤您的服務模型與表達方式,以中性字眼表述,並持續調整。
平等不是指齊頭式的平等,而是客戶主觀意識認為接受到的服務是有受重視與在意本身需求。像是您不應該向素食主義者優先推薦葷食餐廳,宗教的飲食忌諱應降低推薦優先順序、以雙北生活圈習慣類推全台餐飲口味(北部粽、南部粽與...中部粽?)、推薦青少年不符年齡的遊戲清單、忽視生理性別與心理性別的服務推薦、將“護士”或“保姆”等詞翻譯成西班牙語時使用女性代詞等。以上現象在傳統數據分析、做研究追求整體準確率時不是考慮重點,卻是用於生產的機械學習服務必須要重視的關鍵任務。
就業服務法第五條
- 為保障國民就業機會平等,雇主對求職人或所僱用員工,不得以種族、階級、語言、思想、宗教、黨派、籍貫、出生地、性別、性傾向、年齡、婚姻、容貌、五官、身心障礙、星座、血型或以往工會會員身分為由,予以歧視;其他法律有明文規定者,從其規定。
具體實踐機械學習系統的公平性來說,可以使用 Fairness Indicators 察覺模型數據在不同切片的表現,進行識別、改進模型。Google 的第二條 AI 原則指出,我們的技術應避免產生或強化不公平的偏見,提高模型的公平性。
本篇文章採用 TensorFlow 官方 Colab 範例 使用 ( CelebA ) 資料集訓練一個簡單的神經網絡模型來檢測出微笑的明星圖像,部分說明以動畫呈現幫助您理解操作過程。
fairness-indicators
,根據跨年齡組的常用公平指標評估模型性能。本示範主要以fairness-indicators
、 tensorflow_constrained_optimization
(TFCO) 模組與相依套件進行示範, fairness-indicators
為 Google 開源的模組,可以比較模型分類結果的公平指標,依賴 TensorFlow Extended (TFX) 的模型分析 TFMA 模組。 fairness-indicators
可以在驗證資料與模型分析時呈現,另外也可以運用在 TensorBoard 。
!pip install -q -U pip==20.2
!pip install git+https://github.com/google-research/tensorflow_constrained_optimization
!pip install -q tensorflow-datasets tensorflow
!pip install fairness-indicators \
"absl-py==0.12.0" \
"apache-beam<3,>=2.31" \
"avro-python3==1.9.1" \
"pyzmq==17.0.0"
下載 CelebA 資料集
建立訓練模型
tf.keras.Sequential
建立基本模型。檢視資料
df.info()
得知除了標示位置有座標、影像為矩陣之外,其餘特徵都以布林值表示。tfma.addons.fairness.view.widget_view.render_fairness_indicator(eval_results_unconstrained)
指令視覺化查看是否年輕/微笑的 FPR 情形。tfco.rate_context()
用於構建約束。tfco.RateMinimizationProblem()
設定年齡類別小於或等於 5% 的誤報率將被設置為約束。tfco.ProxyLagrangianOptimizerV2()
– 這是真正解決速率約束問題的幫手。
# 摘述TVCO相關部分內容
# 創建整份內容,子內容設定groups_tensor < 1,即"not young"的圖片。
context = tfco.rate_context(predictions, labels=lambda:labels_tensor)
context_subset = context.subset(lambda:groups_tensor < 1)
# 約束設定為 FPR 小於等於 0.05 。
constraints = [tfco.false_positive_rate(context_subset) <= 0.05]
# 設置最小化錯誤
problem = tfco.RateMinimizationProblem(tfco.error_rate(context), constraints)
# 建立約束優化器,
optimizer = tfco.ProxyLagrangianOptimizerV2(
optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
constraint_optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
num_constraints=problem.num_constraints)
# 取得使用優化器 TVCO 取得所有可訓練變量list
var_list = (model_constrained.trainable_weights + list(problem.trainable_variables) +
optimizer.trainable_variables())
tfco.find_best_candidate_index()
可以幫助從每個 epoch 中選擇最佳模型。tfco.find_best_candidate_index()
可以視為一種附加的啟發式方法,它根據訓練數據的準確性和公平性約束(在本例中為跨年齡組的 FPR )對每個結果進行排名。這樣,它可以在整體準確性和公平性約束之間尋找更好的權衡。false_positive_rate
以查看我們感興趣的指標,經過 TFCO 約束優化後,對於不年輕的子資料集,假陽率 FPR 從 0.077 下降為 0.12 ,成功減緩因為年齡造成的預測錯誤問題。